# Maintainer: Leonardo Arena <rnalrd@alpinelinux.org>
pkgname=mongo-c-driver
pkgver=1.16.2
pkgrel=0
pkgdesc="Client library written in C for MongoDB"
url="https://github.com/mongodb/mongo-c-driver"
arch="all"
license="Apache-2.0"
makedepends="openssl-dev snappy-dev zlib-dev libtool py3-sphinx cmake zstd-dev"
subpackages="
	$pkgname-static:_static
	libbson-static:_libbson_static
	$pkgname-dev:_dev
	$pkgname-doc
	libbson
	libbson-dev
	"
source="https://github.com/mongodb/mongo-c-driver/releases/download/$pkgver/mongo-c-driver-$pkgver.tar.gz
	sphinx-taglist-no-parrallel.patch
	sphinx-taglist-nouri-moved.patch
	"

build() {
	mkdir -p "$srcdir"/build
	cd "$srcdir"/build
	cmake \
		-DCMAKE_BUILD_TYPE=None \
		-DCMAKE_INSTALL_PREFIX=/usr \
		-DCMAKE_INSTALL_LIBDIR=lib \
		-DENABLE_BSON:STRING=ON \
		-DENABLE_MONGOC:BOOL=ON \
		-DENABLE_SSL:STRING=OPENSSL \
		-DENABLE_AUTOMATIC_INIT_AND_CLEANUP:BOOL=OFF \
		-DENABLE_MAN_PAGES:BOOL=ON \
		-DENABLE_TESTS:BOOL=ON \
		-DENABLE_EXAMPLES:BOOL=OFF \
		-DCMAKE_SKIP_RPATH=ON \
		"$builddir"
	make
}

check() {
	cd "$srcdir"/build
	export MONGOC_TEST_SKIP_MOCK=on
	export MONGOC_TEST_SKIP_SLOW=on
	export MONGOC_TEST_SKIP_LIVE=on
	make check
}

package() {
	cd "$srcdir"/build
	make DESTDIR="$pkgdir" install

	# removes COPYING, NEWS, README, uninstall script
	rm -rf "$pkgdir/usr/share/mongo-c-driver"
}

libbson() {
	pkgdesc="Building, parsing, and iterating BSON documents"
	mkdir -p "$subpkgdir"/usr/lib
	mv "$pkgdir"/usr/lib/libbson-*.so.* "$subpkgdir"/usr/lib/
}

_static() {
	# Depend on the dev package that has the headers required
	# for compiling against, whether it is static or shared
	depends_static="mongo-c-driver-dev"

	default_static

	# Move the libbson static archive from the mongo-c-driver-static
	# back to $pkgdir it will be then moved to libbson-static
	mkdir -p "$pkgdir"/usr/lib
	mv "$subpkgdir"/usr/lib/libbson-static-1.0.a "$pkgdir"/usr/lib

	# Move development dependencies that only make sense in the context
	# of static libraries like libmongoc-static-1.0.pc
	mkdir -p "$subpkgdir"/usr/lib/pkgconfig
	mkdir -p "$subpkgdir"/usr/lib/cmake
	mv "$pkgdir"/usr/lib/pkgconfig/libmongoc-static-1.0.pc "$subpkgdir"/usr/lib/pkgconfig
	mv "$pkgdir"/usr/lib/cmake/libmongoc-static-1.0 "$subpkgdir"/usr/lib/cmake
}

_libbson_static() {
	# Depend on the dev package that has the headers required
	# for compiling against, whether it is static or shared
	depends_static="libbson-dev"

	default_static

	# Move development dependencies that only make sense in the context
	# of static libraries like libbson-static-1.0.pc
	mkdir -p "$subpkgdir"/usr/lib/pkgconfig
	mkdir -p "$subpkgdir"/usr/lib/cmake
	mv "$pkgdir"/usr/lib/pkgconfig/libbson-static-1.0.pc "$subpkgdir"/usr/lib/pkgconfig
	mv "$pkgdir"/usr/lib/cmake/libbson-static-1.0 "$subpkgdir"/usr/lib/cmake
}

_dev() {
	# This should be removed once abuild knows how to search for pkg-config
	# files that are in another subpackage that is also being created alongside
	# this one.
	depends_dev="libbson-dev"

	default_dev

	# libbson pkg-config files
	mkdir -p "$pkgdir"/usr/lib/pkgconfig
	mv "$subpkgdir"/usr/lib/pkgconfig/libbson-1.0.pc "$pkgdir"/usr/lib/pkgconfig

	# libbson solink
	mkdir -p "$pkgdir"/usr/lib
	mv "$subpkgdir"/usr/lib/libbson-1.0.so "$pkgdir"/usr/lib

	# libbson cmake file
	mkdir -p "$pkgdir"/usr/lib/cmake
	mv "$subpkgdir"/usr/lib/cmake/bson-1.0 "$pkgdir"/usr/lib/cmake
	mv "$subpkgdir"/usr/lib/cmake/libbson-1.0 "$pkgdir"/usr/lib/cmake

	# libbson include files
	mkdir -p "$pkgdir"/usr/include
	mv "$subpkgdir"/usr/include/libbson-1.0 "$pkgdir"/usr/include
}

sha512sums="0930a80692f08329cad558644c25c46da64a0c8b6a9fc7412db0f547dae63bf59e9d29ee774d329c63af186eea751670bf21ccee8cf255f8bc8d5bd78c0e736a  mongo-c-driver-1.16.2.tar.gz
97c1a29ffa9ec30cc2ce555bce05531696f37cc9a00166860d4506538be0b71b742ff8354f7a486abda3a3da2dd248c175edaede227586881016fcb69f150d5d  sphinx-taglist-no-parrallel.patch
63f795240a7110e68375ff1bba63a956e411f1129130686aff40f8ce3b266b33a0b906f2f90882c85487a64fe8060511d6d1646a4aa9203a9a7db6e57256a98d  sphinx-taglist-nouri-moved.patch"
